/**
 * @file 浏览记录 Realm 模型
 * @description 定义浏览记录的 Realm 数据模型
 * @author 黄敏
 * @version 1.0.0
 * @since 2025-09-19
 */

import Realm from 'realm'

/**
 * 浏览记录 Realm 模型类
 */
export class BrowsingHistoryModel extends Realm.Object<BrowsingHistoryModel> {
  _id!: Realm.BSON.ObjectId
  /** 兼容渲染层的数值ID（自增） */
  id?: number
  url!: string
  title?: string | null
  favicon_url?: string | null
  visit_time!: Date
  visit_count!: number
  created_at!: Date
  updated_at!: Date

  static schema: Realm.ObjectSchema = {
    name: 'BrowsingHistory',
    primaryKey: '_id',
    properties: {
      _id: 'objectId',
      // 为了兼容现有渲染层类型，保留一个可选的数值ID，并建立索引
      id: { type: 'int', optional: true, indexed: true },
      url: 'string',
      title: 'string?',
      favicon_url: 'string?',
      visit_time: 'date',
      visit_count: { type: 'int', default: 1 },
      created_at: 'date',
      updated_at: 'date'
    }
  }
}

/**
 * 浏览记录创建输入类型
 */
export interface CreateBrowsingHistoryInput {
  url: string
  title?: string
  favicon_url?: string
  visit_time?: Date
  visit_count?: number
}

/**
 * 浏览记录更新输入类型
 */
export interface UpdateBrowsingHistoryInput {
  id: string
  title?: string
  favicon_url?: string
  visit_time?: Date
  visit_count?: number
}

/**
 * 浏览记录查询参数类型
 */
export interface QueryBrowsingHistoryParams {
  url?: string
  title?: string
  startTime?: Date
  endTime?: Date
  limit?: number
  offset?: number
  sortBy?: 'visit_time' | 'visit_count' | 'created_at' | 'updated_at'
  sortOrder?: 'asc' | 'desc'
}

/**
 * 数据库操作结果类型
 */
export interface DatabaseResult<T = any> {
  success: boolean
  data?: T
  error?: string
  count?: number
}
